/**
 * Created with IntelliJ IDEA.
 * Description: leetcode: 2211. 统计道路上的碰撞次数
 * <a href="https://leetcode.cn/problems/count-collisions-on-a-road/description/">...</a>
 * User: DELL
 * Date: 2023-11-10
 * Time: 23:29
 */
public class Solution {
    /**
     * 解题思路:
     * 本题我在参考完答案后，豁然开朗，其实本题中说的当左右车撞的时候，
     * 碰撞次数+2，而当一辆移动的车和一辆静止的车撞的时候，那么碰撞次
     * 数+1，同时任何两辆车撞后，他们均变成静止，那么就可以联想到当时
     * 高中学习的动能，其实本质上我们可以假定一辆车的动能为 1，那么本题
     * 实际上就是求损失的动能(这里可以多想想）
     * 而该题还有一个很有意思的点，就是你得观察出从最左侧开向左边的车和从
     * 最右侧开向右边的车，不会和任何车相撞，其余的车均会相撞。
     * 由以上两条观测，那么就很简单了，先统计左侧向左开的车辆数量 left，
     * 再统计右侧向右开的车辆数量 right，然后计算出所有车的动能，即
     * 车的数量减去静止的车(静止的车没动能)，那么结果就是
     * res = len - left - right - sCount
     *
     * @param directions
     * @return
     */
    public int countCollisions(String directions) {
        int len = directions.length();
        // 统计左侧 L 的数量
        int leftCount = 0;
        for (int i = 0; i < len; i++) {
            if (directions.charAt(i) != 'L') {
                break;
            }
            leftCount++;
        }
        // 统计右侧 R 的数量
        int rightCount = 0;
        for (int i = len - 1; i >= 0; i--) {
            if (directions.charAt(i) != 'R') {
                break;
            }
            rightCount++;
        }
        // 整个数组中S的数量
        int sCount = 0;
        for (int i = leftCount; i < len - rightCount; i++) {
            if (directions.charAt(i) == 'S') {
                sCount++;
            }
        }
        return len - leftCount - rightCount - sCount;
    }
}
